/**
 * @file StarModel.cpp
 *
 * @author Zbigniew Siciarz
 * @date 2009
 * @version 2.0.0
 * @since 2.0.0
 */

#include "StarModel.h"


/**
 * Konstruktor modelu - inicjalizuje dane tabeli gwiazd.
 *
 * @param tableName nazwa tabeli gwiazd
 * @param column numer kolumny, po której sortowane są gwiazdy
 * @param order rodzaj sortowania (Qt::AscendingOrder / Qt::DescendingOrder)
 * @param parent obiekt rodzica
 */
StarModel::StarModel(const QString & tableName, Dogz::StarManager::TableColumns column,
        Qt::SortOrder order, QObject* parent = 0): QSqlTableModel(parent)
{
    setTable(tableName);
    setSort(column, order);

	setHeaderData(Dogz::StarManager::Name, Qt::Horizontal, tr("Nazwa"));
	setHeaderData(Dogz::StarManager::Type, Qt::Horizontal, tr("Typ"));
	setHeaderData(Dogz::StarManager::MaxMagnitude, Qt::Horizontal,
	            tr("Maks. jasność"));
	setHeaderData(Dogz::StarManager::MinMagnitude, Qt::Horizontal,
	            tr("Min. jasność"));
	setHeaderData(Dogz::StarManager::Epoch, Qt::Horizontal,
	            tr("Epoka"));
	setHeaderData(Dogz::StarManager::Period, Qt::Horizontal,
	            tr("Okres"));
}

QVariant StarModel::data(const QModelIndex& item, int role = Qt::DisplayRole) const
{
	QVariant data = QSqlTableModel::data(item, role);

    if (role == Qt::DisplayRole)
    {
    	if (item.column() == Dogz::StarManager::MinMagnitude ||
    			item.column() == Dogz::StarManager::MaxMagnitude)
        {
    		return QString::number(data.toDouble(), 'f', 2);
        }

        if (item.column() == Dogz::StarManager::Epoch ||
        		item.column() == Dogz::StarManager::Period)
        {
        	if (data.toDouble() < 0.000001)
        		return QString("");
        }
    }

    return data;
}

/**
 * Wybiera z bazy danych tylko obserwacje gwiazd danego typu.
 *
 * Możliwe wartości typów zawarte są w wyliczeniu StarType.
 *
 * @param type typ zmienności
 * @return true, jeśli zapytanie SELECT się powiodło
 */
bool StarModel::selectByType(StarType type)
{
    QString filter;
    switch (type)
    {
    case Eclipsing:
        filter = "type LIKE 'EA%' OR type LIKE 'EB%' OR type LIKE 'EW%'";
        break;
    case Cepheid:
        filter = "type LIKE 'DCEP%' OR type LIKE 'CW%' OR type LIKE 'RR%'";
        break;
    case Mira:
        filter = "type LIKE 'M%'";
        break;
    case Semiregular:
        filter = "type LIKE 'SR%'";
        break;
    case Eruptive:
        filter = "type LIKE 'UG%' OR type LIKE 'N%' OR type LIKE 'SN%'";
        break;
    case All:
    default:
        filter = "type=type";
        break;
    }

    setFilter(filter);
    return select();
}
